home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / td187src.lzh / MAGICDOS.I < prev    next >
Text File  |  1991-06-08  |  12KB  |  718 lines

  1. (*######################################################################
  2.                                                                         
  3.   MAGIC         Modula's  All purpose  GEM  Interface  Cadre
  4.                 ¯         ¯            ¯    ¯          ¯
  5. ########################################################################
  6.  
  7.   GEMDOS        Disk Operating System           Interface for Modula-2
  8.  
  9.                 Implementation für Megamax-Modula-2
  10.  
  11. ########################################################################
  12.   V2.00  16.10.90  Peter Hellinger      Anpassung an neues MagicSys
  13.   V1.04  05.08.90  Peter Hellinger
  14.   V1.01  18.06.90  Peter Hellinger      Auf Anregung von Th. Tempelmann
  15.                                         wurden die Pterm-Funktionen 
  16.                                         verändert.
  17.   V1.00  (C) by    Peter Hellinger
  18. #######################################################################*)
  19.  
  20. IMPLEMENTATION MODULE MagicDOS;
  21.  
  22. (*------------------------------*)
  23. (*      MM2-COMPILERSWITCHES    *)
  24. (*                              *)
  25. (*$R-   Range-Checks            *)
  26. (*$S-   Stack-Check             *)
  27. (*------------------------------*)
  28.  
  29.  
  30. FROM SYSTEM IMPORT ADDRESS, ADR, WORD, ASSEMBLER;
  31. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7,
  32.                         Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15,
  33.                         LOC, Byte, ByteSet,
  34.                         sWORD, sINTEGER, sCARDINAL, sBITSET,
  35.                         lWORD, lINTEGER, lCARDINAL, lBITSET;
  36. IMPORT MagicSys;
  37.  
  38.  
  39. VAR     lc:     lCARDINAL;
  40.         li:     lINTEGER;
  41.         lb:     lBITSET;
  42.         i:      sINTEGER;
  43.         c:      sCARDINAL;
  44.         s:      sBITSET;
  45.         a:      ADDRESS;
  46.         x:      sCARDINAL;
  47.  
  48.  
  49. PROCEDURE Pterm0;
  50. BEGIN
  51.  ASSEMBLER
  52.   MOVE.W  #0, -(SP)
  53.   TRAP    #1
  54.  END;
  55. END Pterm0;
  56.  
  57.  
  58. PROCEDURE Cconin (): lCARDINAL;
  59. BEGIN
  60.  ASSEMBLER
  61.   MOVE.W  #1, -(SP)
  62.   TRAP    #1
  63.   ADDQ.L  #2, SP
  64.   MOVE.L  D0, lc
  65.  END;
  66.  RETURN lc;
  67. END Cconin;
  68.  
  69.  
  70. PROCEDURE Cconout (ch: CHAR);
  71. BEGIN                  
  72.  x:= ORD(ch);
  73.  ASSEMBLER
  74.   MOVE.W  x, -(SP)
  75.   MOVE.W  #2, -(SP)
  76.   TRAP    #1
  77.   ADDQ.L  #4, SP
  78.  END;
  79. END Cconout;
  80.  
  81.  
  82. PROCEDURE Cauxin (): sCARDINAL;
  83. BEGIN
  84.  ASSEMBLER
  85.   MOVE.W  #3, -(SP)
  86.   TRAP    #1
  87.   ADDQ.L  #2, SP
  88.   MOVE.W  D0, c
  89.  END;
  90.  RETURN c;
  91. END Cauxin;
  92.  
  93.  
  94. PROCEDURE Cauxout (ch: CHAR);
  95. BEGIN
  96.  x:= ORD (ch);
  97.  ASSEMBLER
  98.   MOVE.W  x, -(SP)
  99.   MOVE.W  #4, -(SP)
  100.   TRAP    #1
  101.   ADDQ.L  #4, SP
  102.  END;
  103. END Cauxout;
  104.  
  105.  
  106. PROCEDURE Cprnout (ch: CHAR);
  107. BEGIN
  108.  x:= ORD (ch);
  109.  ASSEMBLER
  110.   MOVE.W  x, -(SP)
  111.   MOVE.W  #5, -(SP)
  112.   TRAP    #1
  113.   ADDQ.L  #4, SP
  114.  END;
  115. END Cprnout;
  116.  
  117.  
  118. PROCEDURE Crawio (ch: CHAR): lCARDINAL;
  119. BEGIN
  120.  x:= ORD (ch);
  121.  ASSEMBLER
  122.   MOVE.W  x, -(SP)
  123.   MOVE.W  #6, -(SP)
  124.   TRAP    #1
  125.   ADDQ.L  #4, SP
  126.   MOVE.L  D0, lc
  127.  END;
  128.  RETURN lc;
  129. END Crawio;
  130.  
  131.  
  132. PROCEDURE Crawin (): lCARDINAL;
  133. BEGIN
  134.  ASSEMBLER
  135.   MOVE.W  #7, -(SP)
  136.   TRAP    #1
  137.   ADDQ.L  #2, SP
  138.   MOVE.L  D0, lc
  139.  END;
  140.  RETURN lc;
  141. END Crawin;
  142.  
  143.  
  144. PROCEDURE Cnecin (): lCARDINAL;
  145. BEGIN
  146.  ASSEMBLER
  147.   MOVE.W  #8, -(SP)
  148.   TRAP    #1
  149.   ADDQ.L  #2, SP
  150.   MOVE.L  D0, lc
  151.  END;
  152.  RETURN lc;
  153. END Cnecin;
  154.  
  155.  
  156. PROCEDURE Cconws (string: ARRAY OF CHAR);
  157. BEGIN
  158.  ASSEMBLER
  159.   MOVE.L  string(A6), -(SP)
  160.   MOVE.W  #9, -(SP)
  161.   TRAP    #1
  162.   ADDQ.L  #6, SP
  163.  END;
  164. END Cconws;
  165.  
  166.  
  167. PROCEDURE Cconrs (VAR string: ARRAY OF CHAR);
  168. BEGIN
  169.  ASSEMBLER
  170.   MOVE.L  string(A6), -(SP)
  171.   MOVE.W  #10, -(SP)
  172.   TRAP    #1
  173.   ADDQ.L  #6, SP
  174.  END;
  175. END Cconrs;
  176.  
  177.  
  178. PROCEDURE Cconis (): BOOLEAN;
  179. BEGIN
  180.  ASSEMBLER
  181.   MOVE.W  #11, -(SP)
  182.   TRAP    #1
  183.   ADDQ.L  #2, SP
  184.   MOVE.W  D0, x
  185.  END;
  186.  RETURN x # 0;
  187. END Cconis;
  188.  
  189.  
  190. PROCEDURE Dsetdrv (drive: sCARDINAL; VAR drvmap: lBITSET);
  191. BEGIN
  192.  ASSEMBLER
  193.   MOVE.W  drive(A6), -(SP)
  194.   MOVE.W  #14, -(SP)
  195.   TRAP    #1
  196.   ADDQ.L  #4, SP
  197.   MOVE.L  D0, lb
  198.  END;
  199.  drvmap:= lb;
  200. END Dsetdrv;
  201.  
  202.  
  203. PROCEDURE Cconos (): BOOLEAN;
  204. BEGIN
  205.  ASSEMBLER
  206.   MOVE.W  #16, -(SP)
  207.   TRAP    #1
  208.   ADDQ.L  #2, SP
  209.   MOVE.W  D0, c
  210.  END;
  211.  RETURN c # 0;
  212. END Cconos;
  213.  
  214.  
  215. PROCEDURE Cprnos (): BOOLEAN;
  216. BEGIN
  217.  ASSEMBLER
  218.   MOVE.W  #17, -(SP)
  219.   TRAP    #1
  220.   ADDQ.L  #2, SP
  221.   MOVE.W  D0, c
  222.  END;
  223.  RETURN c # 0;
  224. END Cprnos;
  225.  
  226.  
  227. PROCEDURE Cauxis (): BOOLEAN;
  228. BEGIN
  229.  ASSEMBLER
  230.   MOVE.W  #18, -(SP)
  231.   TRAP    #1
  232.   ADDQ.L  #2, SP
  233.   MOVE.W  D0, c
  234.  END;
  235.  RETURN c # 0;
  236. END Cauxis;
  237.  
  238.  
  239. PROCEDURE Cauxos (): BOOLEAN;
  240. BEGIN
  241.  ASSEMBLER
  242.   MOVE.W  #19, -(SP)
  243.   TRAP    #1
  244.   ADDQ.L  #2, SP
  245.   MOVE.W  D0, c
  246.  END;
  247.  RETURN c # 0;
  248. END Cauxos;
  249.  
  250.  
  251. PROCEDURE Dgetdrv (): sCARDINAL;
  252. BEGIN
  253.  ASSEMBLER
  254.   MOVE.W  #25, -(SP)
  255.   TRAP    #1
  256.   ADDQ.L  #2, SP
  257.   MOVE.W  D0, c
  258.  END;
  259.  RETURN c;
  260. END Dgetdrv;
  261.  
  262.  
  263. PROCEDURE Fsetdta (dta: ADDRESS);
  264. BEGIN
  265.  ASSEMBLER
  266.   MOVE.L  dta(A6), -(SP)
  267.   MOVE.W  #26, -(SP)
  268.   TRAP    #1
  269.   ADDQ.L  #6, SP
  270.  END;
  271. END Fsetdta;
  272.  
  273.  
  274. PROCEDURE Super (VAR stack: ADDRESS);
  275. BEGIN
  276.  a:= stack;
  277.  ASSEMBLER
  278.   MOVE.L  a, -(SP)
  279.   MOVE.W  #32, -(SP)
  280.   TRAP    #1
  281.   ADDQ.L  #6, SP
  282.   MOVE.L  D0, a
  283.  END;
  284.  stack:= a;
  285. END Super;
  286.  
  287.  
  288. PROCEDURE Tgetdate (): sCARDINAL;
  289. BEGIN
  290.  ASSEMBLER
  291.   MOVE.W  #42, -(SP)
  292.   TRAP    #1
  293.   ADDQ.L  #2, SP
  294.   MOVE.W  D0, c
  295.  END;
  296.  RETURN c;
  297. END Tgetdate;
  298.  
  299.  
  300. PROCEDURE Tsetdate (date: sCARDINAL);
  301. BEGIN
  302.  c:= date;
  303.  ASSEMBLER
  304.   MOVE.W  c, -(SP)
  305.   MOVE.W  #43, -(SP)
  306.   TRAP    #1
  307.   ADDQ.L  #4, SP
  308.  END;
  309. END Tsetdate;
  310.  
  311.  
  312. PROCEDURE Tgettime (): sCARDINAL;
  313. BEGIN
  314.  ASSEMBLER
  315.   MOVE.W  #44, -(SP)
  316.   TRAP    #1
  317.   ADDQ.L  #2, SP
  318.   MOVE.W  D0, c
  319.  END;
  320.  RETURN c;
  321. END Tgettime;
  322.  
  323.  
  324. PROCEDURE Tsettime (time: sCARDINAL);
  325. BEGIN
  326.  c:= time;
  327.  ASSEMBLER
  328.   MOVE.W  c, -(SP)
  329.   MOVE.W  #45, -(SP)
  330.   TRAP    #1
  331.   ADDQ.L  #4, SP
  332.  END;
  333. END Tsettime;
  334.  
  335.  
  336. PROCEDURE Fgetdta (): ADDRESS;
  337. BEGIN
  338.  ASSEMBLER
  339.   MOVE.W  #47, -(SP)
  340.   TRAP    #1
  341.   ADDQ.L  #2, SP
  342.   MOVE.L  D0, a
  343.  END;
  344.  RETURN a;
  345. END Fgetdta;
  346.  
  347.  
  348. PROCEDURE Sversion (): sCARDINAL;
  349. BEGIN
  350.  ASSEMBLER
  351.   MOVE.W  #48, -(SP)
  352.   TRAP    #1
  353.   ADDQ.L  #2, SP
  354.   MOVE.W  D0, c
  355.  END;
  356.  RETURN c;
  357. END Sversion;
  358.  
  359.  
  360. PROCEDURE Ptermres (keep: lCARDINAL; return: sCARDINAL);
  361. BEGIN
  362.  c:= return;  lc:= keep;
  363.  ASSEMBLER
  364.   MOVE.W  c, -(SP)
  365.   MOVE.L  lc, -(SP)
  366.   MOVE.W  #49, -(SP)
  367.   TRAP    #1
  368.  END;
  369. END Ptermres;
  370.  
  371.  
  372. PROCEDURE Dfree (VAR dib: ARRAY OF LOC; drive: sCARDINAL);
  373. BEGIN
  374.  c:= drive;
  375.  ASSEMBLER
  376.   MOVE.W  c, -(SP)
  377.   MOVE.L  dib(A6), -(SP)
  378.   MOVE.W  #54, -(SP)
  379.   TRAP    #1
  380.   ADDQ.L  #8, SP
  381.  END;
  382. END Dfree;
  383.  
  384.  
  385. PROCEDURE Dcreate (pfad: ARRAY OF CHAR): sINTEGER;
  386. BEGIN
  387.  ASSEMBLER
  388.   MOVE.L  pfad(A6), -(SP)
  389.   MOVE.W  #57, -(SP)
  390.   TRAP    #1
  391.   ADDQ.L  #6, SP
  392.   MOVE.W  D0, i
  393.  END;
  394.  RETURN i;
  395. END Dcreate;
  396.  
  397.  
  398. PROCEDURE Ddelete (pfad: ARRAY OF CHAR): sINTEGER;
  399. BEGIN
  400.  ASSEMBLER
  401.   MOVE.L  pfad(A6), -(SP)
  402.   MOVE.W  #58, -(SP)
  403.   TRAP    #1
  404.   ADDQ.L  #6, SP
  405.   MOVE.W  D0, i
  406.  END;
  407.  RETURN i;  
  408. END Ddelete;
  409.  
  410.  
  411. PROCEDURE Dsetpath (pfad: ARRAY OF CHAR): sINTEGER;
  412. BEGIN
  413.  ASSEMBLER
  414.   MOVE.L  pfad(A6), -(SP)
  415.   MOVE.W  #59, -(SP)
  416.   TRAP    #1
  417.   ADDQ.L  #6, SP
  418.   MOVE.W  D0, i
  419.  END;
  420.  RETURN i;  
  421. END Dsetpath;
  422.  
  423.  
  424. PROCEDURE Fcreate (name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
  425. BEGIN
  426.  ASSEMBLER
  427.   MOVE.W  attr(A6), -(SP)
  428.   MOVE.L  name(A6), -(SP)
  429.   MOVE.W  #60, -(SP)
  430.   TRAP    #1
  431.   ADDQ.L  #8, SP
  432.   MOVE.W  D0, i
  433.  END;
  434.  RETURN i;
  435. END Fcreate;
  436.  
  437.  
  438. PROCEDURE Fopen (name: ARRAY OF CHAR; mode: sCARDINAL): sINTEGER;
  439. BEGIN
  440.  ASSEMBLER
  441.   MOVE.W  mode(A6), -(SP)
  442.   MOVE.L  name(A6), -(SP)
  443.   MOVE.W  #61, -(SP)
  444.   TRAP    #1
  445.   ADDQ.L  #8, SP
  446.   MOVE.W  D0, i
  447.  END;
  448.  RETURN i;  
  449. END Fopen;
  450.  
  451.  
  452. PROCEDURE Fclose (handle: sINTEGER): sINTEGER;
  453. BEGIN
  454.  ASSEMBLER
  455.   MOVE.W  handle(A6), -(SP)
  456.   MOVE.W  #62, -(SP)
  457.   TRAP    #1
  458.   ADDQ.L  #4, SP
  459.   MOVE.W  D0, i
  460.  END;
  461.  RETURN i;
  462. END Fclose;
  463.  
  464.  
  465. PROCEDURE Fread (handle: sINTEGER; VAR count: lCARDINAL; buffer: ADDRESS);
  466. BEGIN
  467.  lc:= count;
  468.  ASSEMBLER
  469.   MOVE.L  buffer(A6), -(SP)
  470.   MOVE.L  lc, -(SP)
  471.   MOVE.W  handle(A6), -(SP)
  472.   MOVE.W  #63, -(SP)
  473.   TRAP    #1
  474.   LEA     $C(SP), SP
  475.   MOVE.L  D0, lc
  476.  END;
  477.  count:= lc;
  478. END